Clojureで音楽を奏でる
Overtoneで音楽を奏でよう
Overtoneとは、Clojureで音を作って音楽を鳴らすことができるシンセサイザーです。(プログラマブルシンセサイザーというらしい) SuperColliderというプログラマブルシンセサイザーをClojureでラップしているのが、このOvertoneだそうです。
環境構築方法
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.5
- Clojure : 1.5.1
- Leiningen : 2.1.2
Overtoneを使ってみる
まずはleiningenでプロジェクトを作成します。
% lein new music % cd music
次に依存するライブラリをmusic/project.cljに記述しましょう。
(defproject music "0.1.0-SNAPSHOT" :description "use overtone" :dependencies [[org.clojure/clojure "1.5.1"] [overtone "0.8.1"]])
project.cljを記述したらlein depsで依存ライブラリを取得しておきます。
% lein deps
プロジェクトの設定ができたら、次はreplを起動して内部SuperColliderサーバへ接続します。 overtone.liveをロードすれば、Overtoneへの接続ができます。また、外部でovertoneサーバを起動して接続することもできるみたいです。
% lein repl user=> (use 'overtone.live) ・ ・ --> Connecting to internal SuperCollider server... --> Connection established _____ __ / __ /_ _____ _____/ /_____ ____ ___ / / / / | / / _ \/ ___/ __/ __ \/ __ \/ _ \ / /_/ /| |/ / __/ / / /_/ /_/ / / / / __/ \____/ |___/\___/_/ \__/\____/_/ /_/\___/ Collaborative Programmable Music. v0.8 user=>
Getting Startedに従って進めてみましょう。下記のようにすると220hzの鋸歯状波(きょしじょうは)が鳴ります。 ※音がなるので注意 なお、止めるにはkill関数を使用します。
user=> (definst foo [] (saw 220)) #<instrument: foo> user=> (foo) ;音がなります #<synth-node[loading]: user/foo 34> ;ここで表示されてる数値をkillすれば止まる user=> (kill 34) ;これで音が止まる nil
また、Overtoneではいろいろな楽器の音を出すことができます。ためしに、ピアノの音を出してみましょう。 下記コードを実行すると、ドレミファソラシドがピアノ音でなります。
user=> (use 'overtone.inst.piano) user=>(map #(do (Thread/sleep 500) (piano %)) (scale :c4 :major))
なお、 ここにチートシートがあるので、参考にしてください。
まとめ
今回は、Clojure用プログラマブルシンセサイザーを紹介しました。 この動画を見ると、けっこういろんなことができることがわかります。